import os
import pandas as pd
from pandas import DataFrame
def clean_data(df: DataFrame) -> DataFrame:
    """清洗数据：删除空值行，过滤销售额为负数的记录"""
    # 删除任何列有空值的行
    cleaned = df.dropna(axis=0, how='any')
    # 过滤销售额（必须为正数）
    cleaned = cleaned[cleaned['销售额（元）'] > 0]
    # 重置索引
    return cleaned.reset_index(drop=True)
def analyze_data(cleaned_df: DataFrame, filename: str) -> dict:
    """分析数据，返回统计结果"""
    if cleaned_df.empty:
        return {
            '文件名': filename,
            '有效数据量': 0,
            '平均销售额（元）': 0,
            '总销售数量': 0,
            '状态': '无有效数据'
        }
    return {
        '文件名': filename,
        '有效数据量': len(cleaned_df),
        '平均销售额（元）': round(cleaned_df['销售额（元）'].mean(), 2),
        '总销售数量': cleaned_df['销售数量'].sum(),
        '状态': '处理成功'
    }
def process_excel_files(folder_path: str) -> list:
    """批量处理文件夹中的Excel文件，返回汇总结果"""
    results = []
    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        # 只处理.xlsx文件
        if not filename.endswith('.xlsx'):
            continue
        file_path = os.path.join(folder_path, filename)
        try:
            # 读取Excel文件
            df = pd.read_excel(file_path)
            # 检查必要列是否存在
            required_cols = ['区域', '销售人员', '销售额（元）', '销售数量', '日期']
            if not set(required_cols).issubset(df.columns):
                results.append({'文件名': filename, '状态': '缺少必要列'})
                continue
            # 清洗数据
            cleaned_df = clean_data(df)
            # 分析数据
            result = analyze_data(cleaned_df, filename)
            results.append(result)
            print(f"已处理：{filename}")
        except Exception as e:
            # 捕获所有异常（如文件损坏、格式错误等）
            results.append({'文件名': filename, '状态': f'处理失败：{str(e)}'})
            print(f"处理失败：{filename}，错误：{e}")
    return results
def save_summary(results: list, output_file: str):
    """将汇总结果保存为Excel文件"""
    summary_df = pd.DataFrame(results)
    # 确保输出文件夹存在
    output_dir = os.path.dirname(output_file)
    if output_dir and not os.path.exists(output_dir):
        os.makedirs(output_dir)
    summary_df.to_excel(output_file, index=False)
    print(f"汇总结果已保存至：{output_file}")

if __name__ == '__main__':
    # 配置路径（修改为绝对路径）
    input_folder = r'C:\Users\Administrator\Desktop\my-project\python\销售数据'  # 替换为实际的绝对路径
    output_file = r'C:\Users\Administrator\Desktop\my-project\python\销售数据汇总.xlsx'  # 输出文件的绝对路径
    
    # 批量处理并获取结果
    print("开始处理Excel文件...")
    summary_results = process_excel_files(input_folder)
    
    # 保存汇总结果
    save_summary(summary_results, output_file)
    print("所有操作完成！")
# if __name__ == '__main__':
#     # 配置路径
#     input_folder = '销售数据'  # 输入文件夹
#     output_file = '销售数据汇总.xlsx'  # 输出汇总文件
    
#     # 批量处理并获取结果
#     print("开始处理Excel文件...")
#     summary_results = process_excel_files(input_folder)
    
#     # 保存汇总结果
#     save_summary(summary_results, output_file)
#     print("所有操作完成！")

